package controller;

import java.io.File;
import model.FileLoadModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import view.DownloadView;
import view.UebungListView;

/**
 * Kuemmert sich um die Funktionalitaet beim Druecken eines "Dateien herunterladen"-Buttons.
 * Liest aus einer uebergebenen View die angehakten Checkboxes und uebergibt diese an das entsprechende Model zum Herunterladen der Dateien.
 */
public class FileLoadController implements ActionListener {
    /**
     * Die View zum Auslesen der Checkboxes 
     */
    private UebungListView view;
    
    public FileLoadController() {}

    /**
     * Reagiert auf ein Button-Klick Event und liest aus der View alle aktivierten Checkboxes aus.<br>
     * Die URLs der aktivierten Checkboxes werden gebuendelt an ein Model zum herunterladen der Dateien uebergeben.<br><br>
     * 
     * Wurden keine Dateien ausgewaehlt, so erhaelt der Benutzer eine entsprechende Meldung.
     * 
     * @param e das ausgeloeste Event 
     */
    public void actionPerformed(ActionEvent e) {
        if(view != null) {
            ArrayList<JCheckBox> checkboxes = view.getCheckboxes();
            ArrayList files = new ArrayList();
            
            for(JCheckBox box : checkboxes) {
                if(box.isSelected()){
                    files.add("http://harald-brandenburg.de/xml-jaxp/" + box.getName());
                }
            }
            
            if(files.size() > 0){
                JFileChooser fc = new JFileChooser();
                fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                int fcreturn = fc.showDialog(null, "Dateien speichern");
                if(fcreturn == JFileChooser.APPROVE_OPTION) {
                    File path = fc.getSelectedFile();

                    DownloadView downloadView = new DownloadView(files);
                    FileLoadModel fileLoadModel = new FileLoadModel(path.getAbsolutePath());

                    fileLoadModel.addObserver(downloadView);
                    fileLoadModel.load(files);    
                }
            } else {
                JOptionPane.showMessageDialog(null, "Es wurden keine Dateien ausgewaehlt.");
            }
        }
    }

    /**
     * Setzt die View zum Auslesen der Checkboxes
     * 
     * @param uebungListView zu setzende View
     */
    public void setView(UebungListView uebungListView) {
        this.view = uebungListView;
    }

}
